package com.zb.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zb.entity.AccounLoginInfo;
import com.zb.entity.ZjAccount;
import com.zb.exception.SMSException;
import com.zb.vo.AccountInfoVo;
import com.zb.vo.AccountPasswordVo;
import com.zb.vo.RegisterAccountVo;

import java.util.Collection;
import java.util.List;

/**
 * <p>
 * 账号表 服务类
 * </p>
 *
 * @author WEN
 * @since 2023-07-18
 */
public interface ZjAccountService extends IService<ZjAccount> {

    /**
     * 手机号是否已经被注册
     * @param phone
     * @return 返回结果：true：已注册，false：未注册
     */
    boolean existByPhone(String phone);

    /**
     * 根据手机号获取账号信息
     * @param phone
     */
    ZjAccount getByPhone(String phone);

    /**
     * 更改个人信息
     * @param info 登录账号信息
     * @param infoVo 账号信息
     */
    void updateInfo(AccounLoginInfo info, AccountInfoVo infoVo);

    /**
     * 根据账号更新最后登录时间
     * @param id 账号ID
     */
    void updateLastLoginTime(Long id);

    /**
     * 根据手机号或账号查询
     * @param phone 手机号 或 账号
     * @return
     */
    ZjAccount getByPhoneOrAccount(String phone);

    /**
     * 根据手机号查询
     * @param phone
     * @return
     */
    ZjAccount getPhone(String phone);

    /**
     * 查询或保存账号
     * @param id       账号ID
     * @param phone    手机号
     * @param password 密码，不传则生成默认密码，默认密码为手机号后六位
     * @param name     名称
     * @param nickname 昵称
     * @return
     */
    Long getOrSave(Long id, String phone, String password, String name, String nickname);

    /**
     * 根据ID获取部分信息
     * @param ids
     * @return
     */
    List<ZjAccount> getByIds(List<Long> ids);

    /**
     * 根据ID获取账号名称
     * @param id 账号ID
     * @return
     */
    String getNameById(Long id);

    /**
     * 根据账号名称或手机号查询，支持模糊查询
     * @param name 账号名称
     * @param phone 手机号
     * @return
     */
    List<Long> getIdByNameOrPhone(String name, String phone);

    /**
     * 根据账号ID获取姓名
     * @param ids
     * @return
     */
    List<ZjAccount> getNameByIds(List<Long> ids);

}
